<?php

/**
 * 共公函数库
 * @author yellow
 */
function p ($array) {
    echo '<pre>';
    print_r($array);
    echo '</pre>';
}


/**
 * 递归压缩数组
 * @param type $array
 * @param type $pid
 * @param type $chileName
 * @return type
 */

function arrayMerge($array, $access = null, $pid = 0, $childName = 'child') {   //$array这是sql执行后返回的数组。
    $data = array();
    foreach ($array as $value) {                                                //$array赋值给$value
        if (is_array($access)) {                                                //is_array — 检测变量是否是数组
            $value['is_checked'] = in_array($value['id'], $access) ? 1 : 0;
        }
        if ($value['p_id'] == $pid) {                                            //$value['pid']就是$array['pid']
            $value[$childName] = arrayMerge($array, $access, $value['id']);     //$value[$chileName]就是$value['child']
            
            $data[] = $value;
        }
    }
    return $data;
}

/**
 * 友好的时间显示
 *
 * @param int    $sTime 待显示的时间
 * @param string $type  类型. normal | mohu | full | ymd | other
 * @param string $alt   已失效
 * @return string
 */
function friendlyDate($sTime,$type = 'normal',$alt = 'false') {
    if (!$sTime)
        return '';
    //sTime=源时间，cTime=当前时间，dTime=时间差
    $cTime      =   time();
    $dTime      =   $cTime - $sTime;
    $dDay       =   intval(date("z",$cTime)) - intval(date("z",$sTime));
    //$dDay     =   intval($dTime/3600/24);
    $dYear      =   intval(date("Y",$cTime)) - intval(date("Y",$sTime));
    //normal：n秒前，n分钟前，n小时前，日期
    if($type=='normal'){
        if( $dTime < 60 ){
            if($dTime < 10){
                return '刚刚';    //by yangjs
            }else{
                return intval(floor($dTime / 10) * 10)."秒前";
            }
        }elseif( $dTime < 3600 ){
            return intval($dTime/60)."分钟前";
            //今天的数据.年份相同.日期相同.
        }elseif( $dYear==0 && $dDay == 0  ){
            //return intval($dTime/3600)."小时前";
            return '今天'.date('H:i',$sTime);
        }elseif($dYear==0){
            return date("m-d H:i",$sTime);
        }else{
            return date("Y-m-d H:i",$sTime);
        }
    }elseif($type=='mohu'){
        if( $dTime < 60 ){
            return $dTime."秒前";
        }elseif( $dTime < 3600 ){
            return intval($dTime/60)."分钟前";
        }elseif( $dTime >= 3600 && $dDay == 0  ){
            return intval($dTime/3600)."小时前";
        }elseif( $dDay > 0 && $dDay<=7 ){
            return intval($dDay)."天前";
        }elseif( $dDay > 7 &&  $dDay <= 30 ){
            return intval($dDay/7) . '周前';
        }elseif( $dDay > 30 ){
            return intval($dDay/30) . '个月前';
        }
        //full: Y-m-d , H:i:s
    }elseif($type=='full'){
        return date("Y-m-d , H:i:s",$sTime);
    }elseif($type=='ymd'){
        return date("Y-m-d",$sTime);
    }else{
        if( $dTime < 60 ){
            return $dTime."秒前";
        }elseif( $dTime < 3600 ){
            return intval($dTime/60)."分钟前";
        }elseif( $dTime >= 3600 && $dDay == 0  ){
            return intval($dTime/3600)."小时前";
        }elseif($dYear==0){
            return date("Y-m-d H:i:s",$sTime);
        }else{
            return date("Y-m-d H:i:s",$sTime);
        }
    }
}

/**
 * URL组装 支持不同URL模式
 * @param string $url URL表达式，格式：'[分组/模块/操作#锚点@域名]?参数1=值1&参数2=值2...'
 * @param boolean $domain 是否显示域名
 */
function SHOP_U($url = '',$vars='',$domain = true,$redirect = false){

    // 解析URL
    $info = parse_url($url);
    $url = !empty($info['path']) ? $info['path'] : ACTION_NAME;
    if (isset($info['fragment'])) { // 解析锚点
        $anchor = $info['fragment'];
        if (false !== strpos($anchor, '?')) { // 解析参数
            list($anchor, $info['query']) = explode('?', $anchor, 2);
        }
        if (false !== strpos($anchor, '@')) { // 解析域名
            list($anchor, $host) = explode('@', $anchor, 2);
        }
    } elseif (false !== strpos($url, '@')) { // 解析域名
        list($url, $host) = explode('@', $info['path'], 2);
    }
    // 解析子域名
    if (isset($host)) {
        $domain = $host . (strpos($host, '.') ? '' : strstr($_SERVER['HTTP_HOST'], '.'));
    } elseif ($domain === true) {
        $domain = $_SERVER['HTTP_HOST']; //projectname.cn
        if (C('APP_SUB_DOMAIN_DEPLOY')) { // 开启子域名部署
            // '子域名'=>array('项目[/分组]');
            foreach (C('APP_SUB_DOMAIN_RULES') as $key => $rule) {
                if (false === strpos($key, '*') && 0 === strpos($url, $rule[0])) {
                    $domain = $key . strstr($domain, '.'); // 生成对应子域名
                    $url = substr_replace($url, '', 0, strlen($rule[0]));
                    break;
                }
            }
        }
    }
    // URL组装
    $depr = C('URL_PATHINFO_DEPR');
    $var = array();
    if ($url) {
        if (0 === strpos($url, '/')) {// 定义路由
            $route = true;
            $url = substr($url, 1);
            if ('/' != $depr) {
                $url = str_replace('/', $depr, $url);
            }
        } else {
            if ('/' != $depr) { // 安全替换
                $url = str_replace('/', $depr, $url);
            }
            // 解析分组、模块和操作
            $url = trim($url, $depr);
            $path = explode($depr, $url);

            $var[C('VAR_ACTION')] = !empty($path) ? array_pop($path) : ACTION_NAME;
            $var[C('VAR_MODULE')] = !empty($path) ? array_pop($path) : MODULE_NAME;
            if (C('URL_CASE_INSENSITIVE')) {
                $var[C('VAR_MODULE')] = parse_name($var[C('VAR_MODULE')]);
            }
            if (!C('APP_SUB_DOMAIN_DEPLOY') && C('APP_GROUP_LIST')) {
                if (!empty($path)) {
                    $group = array_pop($path);
                    $var[C('VAR_GROUP')] = $group;
                } else {
                    if (GROUP_NAME != C('DEFAULT_GROUP')) {
                        $var[C('VAR_GROUP')] = GROUP_NAME;
                    }
                }
                if (C('URL_CASE_INSENSITIVE') && isset($var[C('VAR_GROUP')])) {
                    $var[C('VAR_GROUP')] = strtolower($var[C('VAR_GROUP')]);
                }
            }
        }
    }
    // 解析参数
    if (is_string($vars)) { // aaa=1&bbb=2 转换成数组
        parse_str($vars, $vars);
    } elseif (!is_array($vars)) {
        $vars = array();
    }

    if (isset($info['query'])) { // 解析地址里面参数 合并到vars
        parse_str($info['query'], $params);
        $vars = array_merge($params, $vars);
    }

    if (isset($vars[C('VAR_LANGUAGE')]) && !empty($vars[C('VAR_LANGUAGE')])) {
        $langSet = $vars[C('VAR_LANGUAGE')];
        unset($vars[C('VAR_LANGUAGE')]);
    }


    if (C('URL_MODEL') == 0) { // 普通模式URL转换
        $url = __APP__ . '?' . http_build_query(array_reverse($var));
        if (!empty($vars)) {
            $vars = urldecode(http_build_query($vars));
            $url .= '&' . $vars;
        }
    } else { // PATHINFO模式或者兼容URL模式

        if (!empty($vars)) { // 添加参数
            foreach ($vars as $var => $val) {
                if ('' !== trim($val))
                    $url .= $depr . $var . $depr . urlencode($val);
            }
        }
    }

    if ($domain) {
        $shopURL = (C('CHECK_SSL_ON') ? 'https://' : 'http://') . $domain .'/'. $url;
    }

    if ($redirect) // 直接跳转URL
        redirect($shopURL);
    else
        return $shopURL;
}

/**
 * 验证码检查
 */
function check_verify($code, $id = ""){
    $verify = new \Think\Verify();
    return $verify->check($code, $id);
}

/**
 * 遍历文件夹
 * @param type $filePath 文件路径
 * @param type $type 文件类型 js  css
 * @return boolean
 */
function traverseFolder($filePath, $type) {
//     p($filePath);
    //判断文件夹路径是否正确
    if (strripos(basename($filePath), '.') !== false)
        return FALSE;

    //检查文件路径
    if (file_exists($filePath)) {
        //文件句柄
        $handle = opendir($filePath);
        //文件数组
        $fileArray = array();
        while (($file = readdir($handle)) !== false) {
            //去掉带"."和".."的文件
            if ($file != "." && $file != "..") {
                if (strripos($file, $type) !== FALSE) {
                    $fileArray[] = $file;
                }
            }
        }
        return $fileArray;
    } else {
        echo '文件路径：' . $filePath . '不存在！<br/>';
        return FALSE;
    }
}

/**
 * 生成随机字符串
 * @param string $type 类型
 * @param number $len 长度
 * @return string
 */
function random_string($type = 'alnum', $len = 8) {
    switch ($type) {
        case 'alpha' : $pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        break;
        case 'alnum' : $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        break;
        case 'numeric' : $pool = '0123456789';
        break;
        case 'nozero' : $pool = '123456789';
        break;
    }

    $str = '';
    for ($i = 0; $i < $len; $i++) {
        $str .= substr($pool, mt_rand(0, strlen($pool) - 1), 1);
    }
    return $str;
}

/**
 *压缩js/css
 * @param $group 文件分组
 * @param $file 文件名
 * @param bool $create 是否输出压缩文件连接
 * @return string
 */
function min_file($group, $file, $create = false) {
    return \Extend\Lib\CompressFile::put($group, $file, $create);
}


?>